package com.example.framework.security.config;

import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;

import java.util.Collections;
import java.util.List;

@Data
@Validated // @Valid 不行
@ConfigurationProperties(prefix = "security")
public class SecurityProperties {

    /**
     * JWT 密钥
     */
    private String secret;

    /**
     * 前端向后端传递JWT时使用HTTP的header名称，前后端要统一
     */
    @NotEmpty(message = "Token Header 不能为空")
    private String headerName;

    /**
     * accessToken 有效时长，默认一天
     */
    private Long accessTokenValiditySeconds = 86400L;

    private boolean accessTokenRenewEnable = false;

    /**
     * accessToken 需要续期时的剩余有效时间
     */
    private Long accessTokenRenewLeftSeconds = 60L;

    /**
     * accessToken 自动续期时长
     */
    private Long accessTokenRenewSeconds = 600L;

    /**
     * refreshToken 有效时长，默认7天
     */
    private Long refreshTokenValiditySeconds = 604800L;

    /**
     * 免登录的 URL 列表
     */
    private List<String> permitAllUrls = Collections.emptyList();

    /**
     * mock 模式的开关
     */
    private Boolean mockEnable = false;

    /**
     * mock 模式的密钥
     * 一定要配置密钥，保证安全性
     */
    private String mockSecret;
}
